const authService = require('../services/authService');
const { AppError } = require('../middlewares/errorHandler');

class AuthController {
  /**
   * 登录
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async login(ctx) {
    const { platform = 'web', ...credentials } = ctx.request.body;
    const result = await authService.login(credentials, platform);
    
    ctx.body = {
      status: '成功',
      data: result
    };
  }

  /**
   * 注册
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async register(ctx) {
    const { platform = 'web', ...userData } = ctx.request.body;
    const result = await authService.register(userData, platform);
    
    ctx.body = {
      status: '成功',
      data: result
    };
  }

  /**
   * 登出
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async logout(ctx) {
    if (!ctx.state.user) {
      throw new AppError(401, '未认证');
    }

    await authService.logout(ctx.state.user.id);
    
    ctx.body = {
      status: '成功',
      message: '已成功登出'
    };
  }

  /**
   * 获取用户信息
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async getProfile(ctx) {
    if (!ctx.state.user) {
      throw new AppError(401, '未认证');
    }

    const profile = await authService.getProfile(ctx.state.user.id);
    
    ctx.body = {
      status: '成功',
      data: profile
    };
  }

  /**
   * 更新用户信息
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async updateProfile(ctx) {
    if (!ctx.state.user) {
      throw new AppError(401, '未认证');
    }

    const updates = ctx.request.body;
    const updatedProfile = await authService.updateProfile(ctx.state.user.id, updates);
    
    ctx.body = {
      status: '成功',
      data: updatedProfile
    };
  }

  /**
   * 获取当前用户
   * @param {Object} ctx - 上下文
   * @returns {Promise<void>}
   */
  async getCurrentUser(ctx) {
    if (!ctx.state.user) {
      throw new AppError(401, '未认证');
    }

    ctx.body = {
      status: '成功',
      data: {
        user: ctx.state.user
      }
    };
  }
}

module.exports = new AuthController(); 